from typing import Dict, Optional
from app.db.crud import get_db
from sqlalchemy.orm import Session
from fastapi import APIRouter, Depends
from app.common.security import check_jwt_token
from app.api.schemas.hazard import Hazard_Create_Schema, Hazard_Update_Schema
from app.common.response_code import resp_200, resp_202
from app.db.crud.hazard_crud import get_hazard_by_hazarddesc, get_hazard_by_id, create_hazardinfo, update_hazardinfo, delete_hazardinfo

# 实例化API路由，需注册到主路由上去
hazardAdminAPI = APIRouter(dependencies=[Depends(check_jwt_token)])

# 新增隐患描述接口
@hazardAdminAPI.post("/add_hazard", summary="新增隐患描述接口")
def add_hazard(hazard: Hazard_Create_Schema, db: Session = Depends(get_db)):
    # 检查隐患编号是否已存在
    if get_hazard_by_hazarddesc(db, hazard.hazarddesc):
        # 如果隐患已存在，返回202错误响应
        return resp_202(hazard.hazarddesc, message="隐患描述已存在")
    else:
        res = create_hazardinfo(db, hazard)
        print(res)
        if (res == "新增隐患描述成功"):
            return resp_200(hazard, message=res)
        else:
            return resp_202(hazard, message=res)

# 获取隐患描述接口
@hazardAdminAPI.post("/get_hazard", summary="获取隐患描述接口")
def get_hazard(hazardid: Optional[Dict] = None, db: Session = Depends(get_db)):
    """
    根据隐患描述id获取隐患描述的API接口

    :param hazarddesc: hazarddesc
    :param db: 数据库会话对象，通过依赖注入获取
    :return: 隐患描述的响应或隐患描述不存在的错误响应
    """
    # 检查是否提供了hazarddesc
    if hazardid:
        # 调用get_hazard_by_id函数获取隐患描述，并返回对应隐患描述和200成功响应
        return resp_200(get_hazard_by_id(db, hazardid["hazard_id"]), message="获取隐患描述成功")
    else:
        # 如果没有提供hazardid，则返回所有隐患描述和200成功响应
        return resp_200(get_hazard_by_id(db, None), message="获取所有隐患描述成功")
    
# 更新隐患描述接口
@hazardAdminAPI.post("/update_hazard", summary="更新隐患描述接口")
def update_hazard(hazard: Hazard_Update_Schema, db: Session = Depends(get_db)):
    # 检查隐患描述是否提交
    if hazard is None:
        # 如果隐患描述为空，返回202错误响应
        return resp_202(hazard, message="待更新隐患描述不能为空")
    # 检查隐患描述是否已存在
    if not get_hazard_by_id(db, hazard.hazard_id):
        # 如果隐患描述不存在，返回202错误响应
        return resp_202(hazard, message="隐患描述不存在")
    else:
        # 如果隐患描述存在，调用update_hazard函数更新隐患描述，并返回200成功响应
        return resp_200(update_hazardinfo(db, hazard), message="隐患描述更新成功")
    
# 删除隐患描述接口
@hazardAdminAPI.post("/delete_hazard", summary="删除隐患描述接口")
def delete_hazard(hazardid: Dict, db: Session = Depends(get_db)):
    print(hazardid)
    # 检查隐患描述id是否提交
    if hazardid is None:
        # 如果隐患描述id为空，返回202错误响应
        return resp_202(hazardid, message="待删除隐患描述id不能为空")
    # 检查隐患描述id是否已存在
    if not get_hazard_by_id(db, hazardid["hazard_id"]):
        # 如果隐患描述id不存在，返回202错误响应
        return resp_202(hazardid, message="隐患描述id不存在")
    else:
        # 如果隐患描述id存在，调用delete_hazard函数删除隐患描述，并返回200成功响应
        return resp_200(delete_hazardinfo(db, hazardid["hazard_id"]), message="隐患描述删除成功")